#ifndef _TRANS_HANDLE_TABLES_ACT_H_
#define _TRANS_HANDLE_TABLES_ACT_H_
#include "md5/md5.h"
#include"get_file_md5char.h"
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
//计算文件哈希值的函数
//--哈希-------------------------------------------------
//主调函数需要传入一个文件名，字符数组,将计算出的哈希值返回给主调函数

//计算文件哈希值的函数
int Compute_file_md5(const char *file_path, char *md5_str)
{
	int i;
	int fd;
	int ret;
	unsigned char data[READ_DATA_SIZE];
	unsigned char md5_value[MD5_SIZE];
	MD5_CTX md5;
	fd = open(file_path, O_RDONLY);
	if (-1 == fd)
	{
		perror("open");
		return -1;
	}
	// init md5
	MD5Init(&md5);
	while (1)
	{
		ret = read(fd, data, READ_DATA_SIZE);
		if (-1 == ret)
		{
			perror("read");
			return -1;
		}
		MD5Update(&md5, data, ret);
		if (0 == ret || ret < READ_DATA_SIZE)
		{
			break;
		}
	}
	close(fd);
	MD5Final(&md5, md5_value);
	for(i = 0; i < MD5_SIZE; i++)
	{
		snprintf(md5_str + i*2, 2+1, "%02x", md5_value[i]);
	}
	md5_str[MD5_STR_LEN] = '\0'; // add end
	return 0;
}

int Get_File_Md5Value(char *filename,char *str_ptr){

    char md5_str[MD5_STR_LEN + 1];
    int ret = Compute_file_md5(filename, md5_str);
    if (0 == ret){
         printf("MD5 value calculation successful\n");
     }
    //数组一共可以装33个字节
    strncpy(str_ptr, md5_str,33);
    //str_ptr[32] = '\0';
    return 0;
}

#endif
